package fr.vvins.core.biz.search;

import java.util.List;
import java.util.Map;

import fr.vvins.core.biz.search.dto.SearchFacetResultDto;
import fr.vvins.core.biz.search.dto.SearchResultDto;
import fr.vvins.core.biz.search.dto.SuggestResultDto;
import fr.vvins.core.common.TechnicalException;

public interface SearchManager {
	
	public SearchResultDto find(String word) throws SearchException, TechnicalException;
	
	public SearchFacetResultDto find(List<String> facets, Map<String, String> facetsLimit, Map<String,Map<String,Long>> facetsRange) throws SearchException, TechnicalException;
	
	public SearchFacetResultDto find(String word, List<String> facets, Map<String, String> facetsLimit, Map<String,Map<String,Long>> facetsRange) throws SearchException, TechnicalException;
	
	public SearchResultDto findEntity(String entity, String word) throws SearchException, TechnicalException;
	
	public SearchFacetResultDto findEntity(String entity, List<String> facets, Map<String, String> facetsLimit, Map<String,Map<String,Long>> facetsRange) throws SearchException, TechnicalException;
	
	public SearchFacetResultDto findEntity(String entity, String word, List<String> facets, Map<String,String> facetsLimit, Map<String,Map<String,Long>> facetsRange) throws SearchException, TechnicalException;
	
	public SuggestResultDto suggest(String word) throws SearchException, TechnicalException;
	
	public SuggestResultDto suggestEntity(String entity, String word) throws SearchException, TechnicalException;

	public SearchResultDto findByQuery(String query) throws SearchException, TechnicalException;
	
}
